#include <algorithm>
#include <vector>
#include <iostream>
#include <nlohmann/json.hpp>

using ordered_json = nlohmann::ordered_json;

ordered_json sort_json_by_value(const ordered_json &j)
{
    // 提取键值对到 vector
    std::vector<std::pair<std::string, ordered_json> > items;
    for (const auto &item: j.items()) {
        items.emplace_back(item.key(), item.value());
    }

    // 按值排序，假设值为数值类型
    std::sort(items.begin(), items.end(),
              [](const auto &a, const auto &b) {

                  return a.second < b.second;
              });

    // 创建新的 ordered_json 并按排序顺序插入
    ordered_json sorted_j;
    for (const auto &item: items) {
        sorted_j[item.first] = item.second;
    }

    return sorted_j;
}

// 示例用法
int main()
{
    ordered_json original = {
        {"b", 2},
        {"a", 1},
        {"c", 3}
    };

    ordered_json sorted = sort_json_by_value(original);

    // 输出结果将保持插入顺序
    std::cout << sorted.dump(4) << std::endl;
    return 0;
}
